part of '../writer.dart';

/// 此测试假设Rawable测试已经通过，可以直接使用，在此基础上，测试IdentityWriter专有的接口
/// 要求：在测试结束后删除一下writer中的文件，以从头来过
testIdentityWriter(IdentityWriter<PseudoPeople> writer) {
  test("input与覆写测试", () {
    writer.deletAll();
    expect(writer.all, isEmpty);
    // 放入2个人，可以得到列表长度为2
    writer.input(pseudoThree);
    writer.input(pseudoFour);
    expect(writer.all, hasLength(2));

    // 再次放入第一个人（信息有修改），得到列表长度依然为2
    writer.input(PseudoPeople("3", "张三大哥", 20));
    expect(writer.all, hasLength(2));

    // 按顺序读取第1个人，发现信息已经修改为后来传入的值
    // 这项操作也验证了覆写并不会改变顺序
    final first = writer.all.first;
    expect(first.name, "张三大哥");
  });

  test("根据id获取与删除功能", () {
    writer.deletAll();
    expect(writer.all, isEmpty);
    // 使用不存在的id获取或删除均会报错
    expect(writer.findOne("none"), isNull);
    expect(() => writer.getOne("none"), isBug);
    expect(() => writer.deleteOne("none"), isBug);
    // 加入一个人后，可以正常读取
    writer.input(pseudoThree);
    expect(writer.getOne("3").name, "张三");
    expect(writer.findOne("3")?.name, "张三");
    // 可以正常删除
    expect(writer.all, hasLength(1));
    writer.deleteOne("3");
    expect(writer.all, isEmpty);
  });
}
